package com.zby.admin.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zby.admin.pojo.dto.ReviewDto;
import com.zby.admin.pojo.vo.ReviewVo;
import com.zby.admin.service.ReviewService;
import com.zby.utils.Result;
import org.springframework.web.bind.annotation.*;

import jakarta.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/review")
@CrossOrigin
public class ReviewController {
    
    @Resource
    private ReviewService reviewService;
    
    /**
     * 发布留言
     * @param reviewDto 留言信息
     * @return 留言结果
     */
    @PostMapping("/add")
    public Result<ReviewVo> addReview(@RequestBody ReviewDto reviewDto) {
        return reviewService.addReview(reviewDto);
    }
    
    /**
     * 获取留言列表（分页）
     * @param page 页码，默认为1
     * @param pageSize 每页大小，默认为10
     * @param productId 商品ID（可选）
     * @return 留言分页列表
     */
    @GetMapping("/list")
    public Result<Page<ReviewVo>> getReviewList(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) Long productId) {
        return reviewService.getReviewList(page, pageSize, productId);
    }
    
    /**
     * 根据商品ID获取所有评论（不分页）
     * @param productId 商品ID
     * @return 该商品的所有评论列表（包含用户信息）
     */
    @GetMapping("/product/{productId}")
    public Result<List<ReviewVo>> getReviewsByProductId(@PathVariable("productId") Long productId) {
        return reviewService.getReviewsByProductId(productId);
    }
    
    /**
     * 根据ID获取留言详情
     * @param reviewId 留言ID
     * @return 留言详情（包含用户信息）
     */
    @GetMapping("/info/{id}")
    public Result<ReviewVo> getReviewById(@PathVariable("id") Long reviewId) {
        return reviewService.getReviewById(reviewId);
    }
    
    /**
     * 更新留言
     * @param reviewId 留言ID
     * @param reviewDto 留言信息
     * @return 更新后的留言
     */
    @PutMapping("/update/{id}")
    public Result<ReviewVo> updateReview(@PathVariable("id") Long reviewId, @RequestBody ReviewDto reviewDto) {
        return reviewService.updateReview(reviewId, reviewDto);
    }
    
    /**
     * 删除留言
     * @param reviewId 留言ID
     * @return 是否删除成功
     */
    @DeleteMapping("/delete/{id}")
    public Result<Boolean> deleteReview(@PathVariable("id") Long reviewId) {
        return reviewService.deleteReview(reviewId);
    }
    
    /**
     * 获取指定留言的回复列表
     * @param parentId 父级留言ID
     * @param page 页码，默认为1
     * @param pageSize 每页大小，默认为10
     * @return 回复留言分页列表
     */
    @GetMapping("/reply/{parentId}")
    public Result<Page<ReviewVo>> getReplyList(
            @PathVariable("parentId") Long parentId,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        return reviewService.getReplyList(parentId, page, pageSize);
    }
}